package 接口.Clonable接口和深拷贝;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 姚东名
 * Date: 2024-06-18
 * Time: 22:46
 */

/*
浅拷贝和深拷贝
Cloneabl拷贝出来的是对象是一份“浅拷贝”
观察一下代码：
 */
//浅拷贝：
class Money {
    public double m = 99.9;
}

class Person implements Cloneable {
    public Money money = new Money();

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
public class TestDemo {
    public static void main(String[] args) throws CloneNotSupportedException {
        Person person1 = new Person();
        Person person2 = (Person)person1.clone();

        System.out.println("通过person2修改前的结果");
        System.out.println(person1.money.m);
        System.out.println(person2.money.m);

        person2.money.m = 100.1;

        System.out.println("通过person2修改后的结果");
        System.out.println(person1.money.m);
        System.out.println(person2.money.m);
    }
}

/*
执行结果：
通过person2修改前的结果
99.9
99.9
通过person2修改后的结果
100.1
100.1
 */

/**
 * 如上代码，我们可以看到，通过clone，我们只是拷贝了Person对象。但是Person对象中的Money对象，并
 * 没有拷贝。通过person2这个引用修改了m的值后，person1这个引用访问m的时候，值也发生了改变。这里
 * 就是发生了浅拷贝。那么同学们想一下如何实现深拷贝呢？
 */